package com.dance.java8.day01;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

public class TestLambda {

    /**
     * 语法格式一
     *  无参数,无返回值
     */
    @Test
    public void test1() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("无参数,无返回值");
            }
        };
        runnable.run();
        System.out.println("----------------------");
        Runnable runnable1 = () -> System.out.println("无参数,无返回值");
        runnable1.run();
    }

    /**
     * 语法格式二
     *  有一个参数,无返回值
     */
    @Test
    public void test2() {
        Consumer<String> consumer = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("有一个参数,无返回值");
        System.out.println("-----------------------");

        Consumer<String> consumer1 = (s) -> System.out.println(s);
        // 单参数可以不加小括号
        Consumer<String> consumer2 = s -> System.out.println(s);
        // 单行代码,双冒号调用
        Consumer<String> consumer3 = System.out::println;
        consumer1.accept("有一个参数,无返回值");
        consumer2.accept("有一个参数,无返回值");
        consumer3.accept("有一个参数,无返回值");
    }

    /**
     * 语法格式三
     *  有两个及其两个以上参数,有返回值,多行代码
     */
    @Test
    public void test3() {
        // 左侧两个及其两个以上参数必须写小括号,右侧执行体,一行代码可以不写return和大括号,多行代码必须写大括号
        Comparator<Integer> comparator = (x, y) -> {
            System.out.println("函数式接口");
            return Integer.compare(x,y);
        };
    }

}
